package demo01_hello_world;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.GetResponse;

import java.io.IOException;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.TimeoutException;

/**
 * @Description 消息消费者
 * @Author shihan
 * @Date 2020/12/19 17:09
 * @Version 1.0
 */
public class SimpleGetConsumer {

    public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException, URISyntaxException, IOException, TimeoutException {
        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置连接 RabbitMQ 服务器的相关配置信息
        /**
         * 设置通信协议：amqp://
         * 设置用户名、密码：root、123456
         * 设置 RabbitMQ 服务器地址：192.168.66.129
         * 设置通信的端口号：5672
         * 指明虚拟主机名：%2f 是 / 的转译字符
         */
        connectionFactory.setUri("amqp://root:123456@192.168.66.129:5672/%2f");

        // 创建连接
        Connection connection = connectionFactory.newConnection();
        // 获取通道
        Channel channel = connection.createChannel();

        // 消费者 主动从 队列 拉取消息的模式：队列中有消息，则进行消费；没有消息，则抛异常；
        /**
         * 目的地 Queue 名
         * 消息是否自动确认
         * 返回值：GetResponse，封装了相关的数据对象
         * PS：Ctrl + P 查看方法的形参说明
         */
        GetResponse basicGet = channel.basicGet("queue.qname", true);
        // 从拉取得到的返回对象中，获取数据信息
        byte[] body = basicGet.getBody();
        System.out.println("消费到消息队列中的消息：" + new String(body));

        channel.close();
        connection.close();

    }

}
